/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.dominio.servicio.impl;

import com.thoughtworks.xstream.XStream;
import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import javax.inject.Inject;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
//import pe.com.cotelasa.common.util.ParserObjectToMap;
import pe.com.cotelasa.scp.dao.IDAOSede;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.service.IServicioSede;
import pe.com.cotelasa.scp.dominio.common.ESTADO_RESULTADO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.common.ResultadoValidacion;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.entidad.Proveedor;
import pe.com.cotelasa.scp.entidad.Sede;

/**
 *
 * @author DESARROLLO01
 */
@Service
public class ServicioSedeImpl implements IServicioSede, Serializable {

    @Inject
    private IDAOSede daoSede;

    @Override
    public Collection<Sede> listarSedesActivos() throws ServiceException {

        try {
            return daoSede.listarActivos(Sede.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Sede conseguirSedePorId(Integer idSede) throws ServiceException {
        try {
            return daoSede.obtenerEntidadPorId(Sede.class, idSede);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<Sede> listarTodasSedes() throws ServiceException {
        try {
            return daoSede.listarTodos(Sede.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public ResultadoValidacion validarSede(Sede sede) throws ServiceException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public ResultadoServicio guardarSede(Sede sede) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            sede.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
            XStream stream =  new XStream();
            System.out.println(stream.toXML(sede));
            daoSede.insertar(sede);
        } catch (DAOException ex) {
            ex.printStackTrace();
            resultadoServicio.setEstadoResultado(ESTADO_RESULTADO.FALLIDO);
            resultadoServicio.setMensaje("Ocurrio un problema al tratar de guardar el proveedor. ");
            Logger.getLogger(ServicioCategoriaArticuloImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return resultadoServicio;
    }

    @Override
    public ResultadoServicio actualizarSede(Sede sede) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            daoSede.actualizar(sede);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public Sede buscarSedeAdministradora(Sede sede) throws ServiceException {
        try {
            return daoSede.buscarSedeAdministradora(sede);
        } catch (DAOException ex) {
            Logger.getLogger(ServicioProveedorArticuloImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    @Override
    public Collection<Sede> listaSedePorOrganizacion(Sede sede) throws ServiceException {
        try {
            return daoSede.listaSedePorOrganizacion(sede);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    @Override
    public Collection<Sede> listaSedePorEmpresa(int idEmpresa) throws ServiceException {
        try {
            return daoSede.listaSedePorEmpresa(idEmpresa);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    

    @Override
    public Collection<Sede> listarSedesPorFiltro(Sede sede) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();

            parametro.put("nombre", sede.getNombre());
            parametro.put("direccion", sede.getDireccion());
            if (sede.getEsTienda() == 1) {
                parametro.put("esTienda", sede.getEsTienda());
            }
            if (sede.getEsAlmacen() == 1) {
                parametro.put("esAlmacen", sede.getEsAlmacen());
            }
            parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            parametro.put("idEmpresa", sede.getIdEmpresa().getId());

            return daoSede.obtenerColeccionEntidadPorFiltros(Sede.class, parametro);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Sede conseguirSedeConUbigeo(Integer idSede) {
        try {
            return daoSede.obtenerEntidadConUbigeo(idSede);
        } catch (DAOException ex) {
            Logger.getLogger(ServicioSedeImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
    @Override
    public Collection<Sede> listaSedePorProveedor(Proveedor proveedor) throws ServiceException {
    	 try {
             return daoSede.listaSedePorProveedor(proveedor);
         } catch (DAOException ex) {
             throw new ServiceException(ex.getMessage(), ex);
         }
    }

    @Override
    public Collection<Sede> listaSedeAlmacenPorOrganizacion(Sede sede) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            if(sede.getIdProveedor() != null){
                parametro.put("idProveedor", sede.getIdProveedor().getId());
            }else if(sede.getIdCliente() != null){
                parametro.put("idCliente", sede.getIdCliente().getId());
            }else if(sede.getIdEmpresa() != null){
                parametro.put("idEmpresa", sede.getIdEmpresa().getId());
            }
            parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            parametro.put("esAlmacen", 1);
            return daoSede.obtenerColeccionEntidadPorFiltros(Sede.class, parametro);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
}
